package com.jt.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.util.ObjectMapperUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
//生产者
@Service(timeout = 3000)
public class DubboUserServiceImpl implements DubboUserService {
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private Jedis jedisCluster;
    /**
     * 业务:
     *    1.将密码加密处理
     *    2.邮箱暂时用电话代替
     * @param user dubbo协议传递来的数据
     */
    @Override
    @Transactional//事务
    public void saveUser(User user) {
        //md5 md5hash==>salt盐值
        byte[] password = user.getPassword().getBytes();
        //利用Spring工具的api进行加密操作
        String md5Password = DigestUtils.md5DigestAsHex(password);
        user.setPassword(md5Password).setEmail(user.getPhone());
        userMapper.insert(user);

    }

    /**
     * 1.校验用户名和密码是否正确 不存在直接返回null
     * 2.动态生成密钥 将用户信息转化为JSON
     * 3.将数据保存到redis中,7天有效
     * 4.返回密钥ticket信息
     * @param user
     * @return
     */
    @Override
    public String findUserByUP(User user) {
        String md5Password=DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        user.setPassword(md5Password);
        //1.根据对象中不为空的属性当做where条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
        User userDB = userMapper.selectOne(queryWrapper);
        //2.判断对象是否有值
        if (userDB==null){
            return null;
        }
        //3.表示用户名和密码正确 开启单点登录的操作
        String ticket= UUID.randomUUID().toString().replace("-", "");//每人一个
        //4.转化之前将数据进行脱敏处理
        userDB.setPassword("123456");
        String userJSON= ObjectMapperUtil.toJson(userDB);
        //5.将数据保存到reids中
        jedisCluster.setex(ticket, 7*24*60*60, userJSON);
        return ticket;
    }
}
